//package com.wg.springboot.stream;
//
//import net.minidev.json.JSONObject;
//import org.apache.commons.lang3.tuple.Pair;
//
//import java.util.ArrayList;
//import java.util.List;
//import java.util.Optional;
//import java.util.function.Function;
//
///**
// * @Description:
// * @Author WuGang
// * @Date 2021/11/11 14:27
// * @Version 1.0
// */
//// todo   待完成
//public class Abnormal {
//    //    流里面处理大批数据 有异常是把异常数据分离
//    public static void main(String[] args) {
//        List<String> valueStrs = new ArrayList();
//        valueStrs.parallelStream()
//                .map(Either.liftWithValue(val -> doSomething(val)))
//                .forEach(value -> {
//                    System.out.println(JSONObject.toJSONString(value.getLeft().get()));
//                    if (value.getRight().isPresent()) {
//                        tList.add((T) value.getRight().get());
//                    }
//                });
//    }
//
//}
//
//@FunctionalInterface
//interface CheckedFunction<T, R> {
//    R apply(T t) throws Exception;
//}
//
//
//class Either<L, R> {
//    private final L left;
//    private final R right;
//
//    private Either(L left, R right) {
//        this.left = left;
//        this.right = right;
//    }
//
//    public static <T, R> Function<T, Either> liftWithValue(CheckedFunction<T, R> function) {
//        return t -> {
//            try {
//                return Either.Right(function.apply(t));
//            } catch (Exception ex) {
//                return Either.Left(Pair.of(ex, t));
//            }
//        };
//    }
//
//    public static <T, R> Function<T, Either> lift(CheckedFunction<T, R> function) {
//        return t -> {
//            try {
//                return Either.Right(function.apply(t));
//            } catch (Exception ex) {
//                return Either.Left(ex);
//            }
//        };
//    }
//
//    public static <L, R> Either<L, R> Left(L value) {
//        return new Either(value, null);
//    }
//
//    public static <L, R> Either<L, R> Right(R value) {
//        return new Either(null, value);
//    }
//
//    public <T> Optional<T> mapLeft(Function<? super L, T> mapper) {
//        if (isLeft()) {
//            return Optional.of(mapper.apply(left));
//        }
//        return Optional.empty();
//    }
//
//    public <T> Optional<T> mapRight(Function<? super R, T> mapper) {
//        if (isRight()) {
//            return Optional.of(mapper.apply(right));
//        }
//        return Optional.empty();
//    }
//
//    public String toString() {
//        if (isLeft()) {
//            return "Left(" + left + ")";
//        }
//        return "Right(" + right + ")";
//    }
//
//    public Optional<L> getLeft() {
//        return Optional.ofNullable(left);
//    }
//
//    public Optional<R> getRight() {
//        return Optional.ofNullable(right);
//    }
//
//    public boolean isLeft() {
//        return left != null;
//    }
//
//    public boolean isRight() {
//        return right != null;
//    }
//
//
//}
